home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / comm2 / termsorc.lha / Extras / Source / term-source.lha / EmulationPanel.c < prev    next >
C/C++ Source or Header  |  1995-09-26  |  20KB  |  905 lines

  1. /*
  2. **    EmulationPanel.c
  3. **
  4. **    Editing panel for emulation configuration
  5. **
  6. **    Copyright © 1990-1995 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. */
  9.  
  10. #include "termGlobal.h"
  11.  
  12. enum    {    GAD_USE=1000, GAD_CANCEL, GAD_DEFAULT,
  13.         GAD_SCROLL, GAD_JUMP_SCROLL,
  14.         GAD_EDITPENS, GAD_STDPENS,
  15.         GAD_PAGER, GAD_PAGEGROUP, GAD_BBS_ANSI_COMPLIANT,
  16.         GAD_TERMINALTYPE, GAD_CLS_RESETS_CURSOR, GAD_WRAP_CURSOR_MOVES,
  17.         GAD_WRAP_CHARACTERS
  18.     };
  19.  
  20. STATIC BOOLEAN __regargs
  21. PenPanel(struct Window *Parent,struct Configuration *Config,WORD Depth)
  22. {
  23.     struct LayoutHandle    *Handle;
  24.     UWORD             Pen[16];
  25.     UBYTE             Attribute[4];
  26.     UBYTE             Colours[16];
  27.     WORD             i;
  28.     BOOLEAN             Result = FALSE;
  29.  
  30.     for(i = 0 ; i < (1L << Depth) ; i++)
  31.         Colours[i] = MappedPens[0][i];
  32.  
  33.     CopyMem(Config -> EmulationConfig -> Pens,Pen,sizeof(Pen));
  34.     CopyMem(Config -> EmulationConfig -> Attributes,Attribute,sizeof(Attribute));
  35.  
  36.     if(Handle = LT_CreateHandleTags(Parent -> WScreen,
  37.         LH_LocaleHook,    &LocaleHook,
  38.         LH_ExactClone,    TRUE,
  39.         LH_ExitFlush,    FALSE,
  40.     TAG_DONE))
  41.     {
  42.         struct Window *PanelWindow;
  43.  
  44.         LT_New(Handle,
  45.             LA_Type,    VERTICAL_KIND,
  46.         TAG_DONE);
  47.         {
  48.             LT_New(Handle,
  49.                 LA_Type,    HORIZONTAL_KIND,
  50.             TAG_DONE);
  51.             {
  52.                 LT_New(Handle,
  53.                     LA_Type,    VERTICAL_KIND,
  54.                     LA_LabelID,    MSG_PENPANEL_DRAWING_PENS_TXT,
  55.                 TAG_DONE);
  56.                 {
  57.                     LT_New(Handle,
  58.                         LA_Type,        PALETTE_KIND,
  59.                         LA_LabelText,        "_0",
  60.                         GTPA_Depth,        Depth,
  61.                         GTPA_ColorTable,    Colours,
  62.                         LAPA_SmallPalette,    TRUE,
  63.                         LA_UWORD,        &Pen[0],
  64.                     TAG_DONE);
  65.  
  66.                     LT_New(Handle,
  67.                         LA_Type,        PALETTE_KIND,
  68.                         LA_LabelText,        "_1",
  69.                         GTPA_Depth,        Depth,
  70.                         GTPA_ColorTable,    Colours,
  71.                         LAPA_SmallPalette,    TRUE,
  72.                         LA_UWORD,        &Pen[1],
  73.                     TAG_DONE);
  74.  
  75.                     if(Depth > 1)
  76.                     {
  77.                         LT_New(Handle,
  78.                             LA_Type,        PALETTE_KIND,
  79.                             LA_LabelText,        "_2",
  80.                             GTPA_Depth,        Depth,
  81.                             GTPA_ColorTable,    Colours,
  82.                             LAPA_SmallPalette,    TRUE,
  83.                             LA_UWORD,        &Pen[2],
  84.                         TAG_DONE);
  85.  
  86.                         LT_New(Handle,
  87.                             LA_Type,        PALETTE_KIND,
  88.                             LA_LabelText,        "_3",
  89.                             GTPA_Depth,        Depth,
  90.                             GTPA_ColorTable,    Colours,
  91.                             LAPA_SmallPalette,    TRUE,
  92.                             LA_UWORD,        &Pen[3],
  93.                         TAG_DONE);
  94.                     }
  95.  
  96.                     if(Depth > 2)
  97.                     {
  98.                         LT_New(Handle,
  99.                             LA_Type,        PALETTE_KIND,
  100.                             LA_LabelText,        "_4",
  101.                             GTPA_Depth,        Depth,
  102.                             GTPA_ColorTable,    Colours,
  103.                             LAPA_SmallPalette,    TRUE,
  104.                             LA_UWORD,        &Pen[4],
  105.                         TAG_DONE);
  106.  
  107.                         LT_New(Handle,
  108.                             LA_Type,        PALETTE_KIND,
  109.                             LA_LabelText,        "_5",
  110.                             GTPA_Depth,        Depth,
  111.                             GTPA_ColorTable,    Colours,
  112.                             LAPA_SmallPalette,    TRUE,
  113.                             LA_UWORD,        &Pen[5],
  114.                         TAG_DONE);
  115.  
  116.                         LT_New(Handle,
  117.                             LA_Type,        PALETTE_KIND,
  118.                             LA_LabelText,        "_6",
  119.                             GTPA_Depth,        Depth,
  120.                             GTPA_ColorTable,    Colours,
  121.                             LAPA_SmallPalette,    TRUE,
  122.                             LA_UWORD,        &Pen[6],
  123.                         TAG_DONE);
  124.  
  125.                         LT_New(Handle,
  126.                             LA_Type,        PALETTE_KIND,
  127.                             LA_LabelText,        "_7",
  128.                             GTPA_Depth,        Depth,
  129.                             GTPA_ColorTable,    Colours,
  130.                             LAPA_SmallPalette,    TRUE,
  131.                             LA_UWORD,        &Pen[7],
  132.                         TAG_DONE);
  133.                     }
  134.  
  135.                     LT_EndGroup(Handle);
  136.                 }
  137.  
  138.                 LT_New(Handle,
  139.                     LA_Type,    VERTICAL_KIND,
  140.                     LA_LabelID,    MSG_ATTRIBUTES_TXT,
  141.                 TAG_DONE);
  142.                 {
  143.                     LT_New(Handle,
  144.                         LA_Type,    CYCLE_KIND,
  145.                         LA_LabelID,    MSG_ATTRIBUTE1_GAD,
  146.                         LACY_FirstLabel,MSG_ATTRIBUTE1_GAD,
  147.                         LACY_LastLabel,    MSG_ATTRIBUTE5_GAD,
  148.                         LA_UBYTE,    &Attribute[TEXTATTR_UNDERLINE],
  149.                     TAG_DONE);
  150.  
  151.                     LT_New(Handle,
  152.                         LA_Type,    CYCLE_KIND,
  153.                         LA_LabelID,    MSG_ATTRIBUTE2_GAD,
  154.                         LACY_FirstLabel,MSG_ATTRIBUTE1_GAD,
  155.                         LACY_LastLabel,    MSG_ATTRIBUTE5_GAD,
  156.                         LA_UBYTE,    &Attribute[TEXTATTR_HIGHLIGHT],
  157.                     TAG_DONE);
  158.  
  159.                     LT_New(Handle,
  160.                         LA_Type,    CYCLE_KIND,
  161.                         LA_LabelID,    MSG_ATTRIBUTE3_GAD,
  162.                         LACY_FirstLabel,MSG_ATTRIBUTE1_GAD,
  163.                         LACY_LastLabel,    MSG_ATTRIBUTE5_GAD,
  164.                         LA_UBYTE,    &Attribute[TEXTATTR_BLINK],
  165.                     TAG_DONE);
  166.  
  167.                     LT_New(Handle,
  168.                         LA_Type,    CYCLE_KIND,
  169.                         LA_LabelID,    MSG_ATTRIBUTE4_GAD,
  170.                         LACY_FirstLabel,MSG_ATTRIBUTE1_GAD,
  171.                         LACY_LastLabel,    MSG_ATTRIBUTE5_GAD,
  172.                         LA_UBYTE,    &Attribute[TEXTATTR_INVERSE],
  173.                     TAG_DONE);
  174.  
  175.                     LT_EndGroup(Handle);
  176.                 }
  177.  
  178.                 LT_EndGroup(Handle);
  179.             }
  180.  
  181.             LT_New(Handle,
  182.                 LA_Type,VERTICAL_KIND,
  183.             TAG_DONE);
  184.             {
  185.                 LT_New(Handle,
  186.                     LA_Type,    XBAR_KIND,
  187.                     LAXB_FullSize,    TRUE,
  188.                 TAG_DONE);
  189.  
  190.                 LT_EndGroup(Handle);
  191.             }
  192.  
  193.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  194.                 LAGR_SameSize,    TRUE,
  195.                 LAGR_Spread,    TRUE,
  196.             TAG_DONE);
  197.             {
  198.                 LT_New(Handle,
  199.                     LA_Type,    BUTTON_KIND,
  200.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  201.                     LA_ID,        GAD_USE,
  202.                     LABT_ReturnKey,    TRUE,
  203.                     LABT_ExtraFat,    TRUE,
  204.                 TAG_DONE);
  205.  
  206.                 LT_New(Handle,
  207.                     LA_Type,    BUTTON_KIND,
  208.                     LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  209.                     LA_ID,        GAD_CANCEL,
  210.                     LABT_EscKey,    TRUE,
  211.                     LABT_ExtraFat,    TRUE,
  212.                 TAG_DONE);
  213.  
  214.                 LT_EndGroup(Handle);
  215.             }
  216.  
  217.             LT_EndGroup(Handle);
  218.         }
  219.  
  220.         if(PanelWindow = LT_Build(Handle,
  221.             LAWN_TitleID,        MSG_PENPANEL_SCREEN_DRAWING_PENS_TXT,
  222.             LAWN_IDCMP,        IDCMP_CLOSEWINDOW,
  223.             LAWN_HelpHook,        &GuideHook,
  224.             LAWN_Parent,        Window,
  225.             WA_DepthGadget,        TRUE,
  226.             WA_CloseGadget,        TRUE,
  227.             WA_DragBar,        TRUE,
  228.             WA_RMBTrap,        TRUE,
  229.             WA_Activate,        TRUE,
  230.             WA_SimpleRefresh,    TRUE,
  231.         TAG_DONE))
  232.         {
  233.             struct IntuiMessage    *Message;
  234.             BOOLEAN             Done = FALSE;
  235.             ULONG             MsgClass;
  236.             struct Gadget        *MsgGadget;
  237.  
  238.             PushWindow(PanelWindow);
  239.  
  240.             LT_ShowWindow(Handle,TRUE);
  241.  
  242.             GuideContext(CONTEXT_TEXTPEN_PANEL);
  243.  
  244.             do
  245.             {
  246.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  247.                     break;
  248.  
  249.                 while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  250.                 {
  251.                     MsgClass    = Message -> Class;
  252.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  253.  
  254.                     LT_ReplyIMsg(Message);
  255.  
  256.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  257.                         Done = TRUE;
  258.  
  259.                     if(MsgClass == IDCMP_GADGETUP)
  260.                     {
  261.                         switch(MsgGadget -> GadgetID)
  262.                         {
  263.                             case GAD_USE:
  264.  
  265.                                 CopyMem(Pen,Config -> EmulationConfig -> Pens,sizeof(Pen));
  266.                                 CopyMem(Attribute,Config -> EmulationConfig -> Attributes,sizeof(Attribute));
  267.  
  268.                                 Result = Done = TRUE;
  269.                                 break;
  270.  
  271.                             case GAD_CANCEL:
  272.  
  273.                                 Done = TRUE;
  274.                                 break;
  275.                         }
  276.                     }
  277.                 }
  278.             }
  279.             while(!Done);
  280.  
  281.             PopWindow();
  282.         }
  283.  
  284.         LT_DeleteHandle(Handle);
  285.     }
  286.  
  287.     return(Result);
  288. }
  289.  
  290. BYTE __regargs
  291. EmulationPanel(struct Configuration *LocalConfig,BYTE *Default)
  292. {
  293.     STATIC LONG PageTitleID[5] =
  294.     {
  295.         MSG_V36_0034,
  296.         MSG_V36_0035,
  297.         MSG_V36_0036,
  298.         MSG_PENPANEL_DRAWING_PENS_TXT,
  299.         -1
  300.     };
  301.  
  302.     STATIC BYTE         InitialPage = 0;
  303.  
  304.     struct LayoutHandle    *Handle;
  305.     BYTE             Changed = FALSE,
  306.                  Cancel = FALSE;
  307.     BOOL             PenChoices;
  308.     WORD             Depth,
  309.                  CurrentDepth;
  310.     STRPTR             PageTitle[5];
  311.  
  312.     LocalizeStringTable(PageTitle,PageTitleID);
  313.  
  314.     SaveConfig(LocalConfig,PrivateConfig);
  315.  
  316.     /* ALWAYS */
  317.     {
  318.         struct Configuration *Ptr;
  319.  
  320.         if(LocalConfig -> ScreenConfig)
  321.             Ptr = LocalConfig;
  322.         else
  323.             Ptr = Config;
  324.  
  325. /*        if((Ptr -> ScreenConfig -> UseWorkbench || Ptr -> ScreenConfig -> ShareScreen) && !Kick30)*/
  326.         if(Ptr -> ScreenConfig -> UseWorkbench || Ptr -> ScreenConfig -> ShareScreen)
  327.             PenChoices = FALSE;
  328.         else
  329.             PenChoices = TRUE;
  330.  
  331.         switch(Ptr -> ScreenConfig -> ColourMode)
  332.         {
  333.             case COLOUR_MONO:
  334.  
  335.                 Depth = 1;
  336.                 break;
  337.  
  338.             case COLOUR_AMIGA:
  339.  
  340.                 Depth = 2;
  341.                 break;
  342.  
  343.             case COLOUR_EIGHT:
  344.  
  345.                 Depth = 3;
  346.                 break;
  347.  
  348.             case COLOUR_SIXTEEN:
  349.  
  350.                 Depth = 4;
  351.                 break;
  352.         }
  353.     }
  354.  
  355.     switch(Config -> ScreenConfig -> ColourMode)
  356.     {
  357.         case COLOUR_MONO:
  358.  
  359.             CurrentDepth = 1;
  360.             break;
  361.  
  362.         case COLOUR_AMIGA:
  363.  
  364.             CurrentDepth = 2;
  365.             break;
  366.  
  367.         case COLOUR_EIGHT:
  368.  
  369.             CurrentDepth = 3;
  370.             break;
  371.  
  372.         case COLOUR_SIXTEEN:
  373.  
  374.             CurrentDepth = 4;
  375.             break;
  376.     }
  377.  
  378.     if(Depth != CurrentDepth || !PenChoices)
  379.     {
  380.         PageTitle[3] = NULL;
  381.  
  382.         if(InitialPage == 4)
  383.             InitialPage = 3;
  384.     }
  385.     else
  386.         PageTitle[4] = NULL;
  387.  
  388. /*    kprintf("depth %ld currentdepth %ld penchoices %ld pagetitle[3] 0x%08lx\n",Depth,CurrentDepth,PenChoices,PageTitle[3]);*/
  389.  
  390.     if(Handle = LT_CreateHandleTags(Window -> WScreen,
  391.         LH_LocaleHook,    &LocaleHook,
  392.         LH_ExactClone,    TRUE,
  393.     TAG_DONE))
  394.     {
  395.         struct Window *PanelWindow;
  396.  
  397.         LT_New(Handle,
  398.             LA_Type,    VERTICAL_KIND,
  399.         TAG_DONE);
  400.         {
  401.             LT_New(Handle,
  402.                 LA_Type,VERTICAL_KIND,
  403.             TAG_DONE);
  404.             {
  405.                 LT_New(Handle,
  406. //                    LA_Type,    CYCLE_KIND,
  407.                     LA_Type,    TAB_KIND,
  408.                     LA_ID,        GAD_PAGER,
  409.                     LA_LabelID,    MSG_XFER_PAGE_TXT,
  410.                     GTCY_Labels,    PageTitle,
  411.                     LACY_AutoPageID,GAD_PAGEGROUP,
  412.                     LACY_TabKey,    TRUE,
  413.                     LA_BYTE,    &InitialPage,
  414.                     LATB_FullWidth,    TRUE,
  415.                 TAG_DONE);
  416.  
  417.                 LT_EndGroup(Handle);
  418.             }
  419.  
  420.             LT_New(Handle,
  421.                 LA_Type,    VERTICAL_KIND,
  422.                 LA_ID,        GAD_PAGEGROUP,
  423. //                LAGR_Frame,    TRUE,
  424.                 LAGR_ActivePage,InitialPage,
  425.             TAG_DONE);
  426.             {
  427.                 LT_New(Handle,
  428.                     LA_Type,    VERTICAL_KIND,
  429.                 TAG_DONE);
  430.                 {
  431.                     LT_New(Handle,
  432.                         LA_Type,    CYCLE_KIND,
  433.                         LA_LabelID,    MSG_EMULATIONPANEL_CURSOR_KEYS_GAD,
  434.                         LA_BYTE,    &LocalConfig -> EmulationConfig -> CursorMode,
  435.                         LACY_FirstLabel,MSG_EMULATIONPANEL_STANDARD_MODE_TXT,
  436.                         LACY_LastLabel,    MSG_EMULATIONPANEL_APPLICATION_MODE_TXT,
  437.                         LA_Chars,    20,
  438.                     TAG_DONE);
  439.  
  440.                     LT_New(Handle,
  441.                         LA_Type,    CHECKBOX_KIND,
  442.                         LA_LabelID,    MSG_LOCK_CURSOR_KEY_MODE_TXT,
  443.                         LA_BYTE,    &LocalConfig -> EmulationConfig -> CursorLocked,
  444.                     TAG_DONE);
  445.  
  446.                     LT_New(Handle,
  447.                         LA_Type,    XBAR_KIND,
  448.                     TAG_DONE);
  449.  
  450.                     LT_New(Handle,
  451.                         LA_Type,    CYCLE_KIND,
  452.                         LA_LabelID,    MSG_EMULATIONPANEL_NUMERIC_KEYPAD_GAD,
  453.                         LA_BYTE,    &LocalConfig -> EmulationConfig -> NumericMode,
  454.                         LACY_FirstLabel,MSG_EMULATIONPANEL_STANDARD_MODE_TXT,
  455.                         LACY_LastLabel,    MSG_EMULATIONPANEL_APPLICATION_MODE_TXT,
  456.                     TAG_DONE);
  457.  
  458.                     LT_New(Handle,
  459.                         LA_Type,    CHECKBOX_KIND,
  460.                         LA_LabelID,    MSG_V36_1820,
  461.                         LA_BYTE,    &LocalConfig -> EmulationConfig -> KeysLocked,
  462.                     TAG_DONE);
  463.  
  464.                     LT_New(Handle,
  465.                         LA_Type,    XBAR_KIND,
  466.                     TAG_DONE);
  467.  
  468.                     LT_New(Handle,
  469.                         LA_Type,    CHECKBOX_KIND,
  470.                         LA_LabelID,    MSG_EMULATIONPANEL_SWAP_BS_AND_DEL_GAD,
  471.                         LA_BYTE,    &LocalConfig -> EmulationConfig -> SwapBSDelete,
  472.                     TAG_DONE);
  473.  
  474.                     LT_EndGroup(Handle);
  475.                 }
  476.  
  477.                 LT_New(Handle,
  478.                     LA_Type,    VERTICAL_KIND,
  479.                 TAG_DONE);
  480.                 {
  481.                     LT_New(Handle,
  482.                         LA_Type,    VERTICAL_KIND,
  483.                     TAG_DONE);
  484.                     {
  485.                         LT_New(Handle,
  486.                             LA_Type,    CYCLE_KIND,
  487.                             LA_LabelID,    MSG_TERMINALTYPE_TXT,
  488.                             LA_BYTE,    &LocalConfig -> EmulationConfig -> TerminalType,
  489.                             LACY_FirstLabel,MSG_TERMINALTYPE_VT200_TXT,
  490.                             LACY_LastLabel,    MSG_TERMINALTYPE_VT100_TXT,
  491.                             LA_ID,        GAD_TERMINALTYPE,
  492.                         TAG_DONE);
  493.  
  494.                         LT_New(Handle,
  495.                             LA_Type,    XBAR_KIND,
  496.                         TAG_DONE);
  497.  
  498.                         LT_EndGroup(Handle);
  499.                     }
  500.  
  501.                     LT_New(Handle,
  502.                         LA_Type,    VERTICAL_KIND,
  503.                     TAG_DONE);
  504.                     {
  505.                         LT_New(Handle,
  506.                             LA_Type,    CHECKBOX_KIND,
  507.                             LA_LabelID,    MSG_BBS_ANSI_COMPLIANT_TXT,
  508.                             LA_ID,        GAD_BBS_ANSI_COMPLIANT,
  509.                             GTCB_Checked,    LocalConfig -> EmulationConfig -> CLSResetsCursor && LocalConfig -> EmulationConfig -> CursorWrap && LocalConfig -> EmulationConfig -> LineWrap && LocalConfig -> EmulationConfig -> TerminalType == TERMINAL_VT102,
  510.                         TAG_DONE);
  511.  
  512.                         LT_EndGroup(Handle);
  513.                     }
  514.  
  515.                     LT_New(Handle,
  516.                         LA_Type,    HORIZONTAL_KIND,
  517.                     TAG_DONE);
  518.                     {
  519.                         LT_New(Handle,
  520.                             LA_Type,    VERTICAL_KIND,
  521.                         TAG_DONE);
  522.                         {
  523.                             LT_New(Handle,
  524.                                 LA_Type,    CHECKBOX_KIND,
  525.                                 LA_LabelID,    MSG_EMULATIONPANEL_WRAP_CHARACTERS_GAD,
  526.                                 LA_BYTE,    &LocalConfig -> EmulationConfig -> LineWrap,
  527.                                 LA_ID,        GAD_WRAP_CHARACTERS,
  528.                             TAG_DONE);
  529.  
  530.                             LT_New(Handle,
  531.                                 LA_Type,    CHECKBOX_KIND,
  532.                                 LA_LabelID,    MSG_LOCK_WRAPPING_GAD,
  533.                                 LA_BYTE,    &LocalConfig -> EmulationConfig -> LockWrapping,
  534.                             TAG_DONE);
  535.  
  536.                             LT_New(Handle,
  537.                                 LA_Type,    CHECKBOX_KIND,
  538.                                 LA_LabelID,    MSG_EMULATIONPANEL_INSERT_MODE_GAD,
  539.                                 LA_BYTE,    &LocalConfig -> EmulationConfig -> InsertMode,
  540.                             TAG_DONE);
  541.  
  542.                             LT_New(Handle,
  543.                                 LA_Type,    CHECKBOX_KIND,
  544.                                 LA_LabelID,    MSG_EMULATIONPANEL_NEW_LINE_MODE_GAD,
  545.                                 LA_BYTE,    &LocalConfig -> EmulationConfig -> NewLineMode,
  546.                             TAG_DONE);
  547.  
  548.                             LT_EndGroup(Handle);
  549.                         }
  550.  
  551.                         LT_New(Handle,
  552.                             LA_Type,    VERTICAL_KIND,
  553.                         TAG_DONE);
  554.                         {
  555.                             LT_New(Handle,
  556.                                 LA_Type,    CHECKBOX_KIND,
  557.                                 LA_LabelID,    MSG_EMULATIONPANEL_CLS_RESETS_CURSOR_GAD,
  558.                                 LA_BYTE,    &LocalConfig -> EmulationConfig -> CLSResetsCursor,
  559.                                 LA_ID,        GAD_CLS_RESETS_CURSOR,
  560.                             TAG_DONE);
  561.  
  562.                             LT_New(Handle,
  563.                                 LA_Type,    CHECKBOX_KIND,
  564.                                 LA_LabelID,    MSG_EMULATIONPANEL_PRINTER_CONTROL_GAD,
  565.                                 LA_BYTE,    &LocalConfig -> EmulationConfig -> PrinterEnabled,
  566.                             TAG_DONE);
  567.  
  568.                             LT_New(Handle,
  569.                                 LA_Type,    CHECKBOX_KIND,
  570.                                 LA_LabelID,    MSG_LOCK_STYLE_GAD,
  571.                                 LA_BYTE,    &LocalConfig -> EmulationConfig -> LockStyle,
  572.                             TAG_DONE);
  573.  
  574.                             LT_New(Handle,
  575.                                 LA_Type,    CHECKBOX_KIND,
  576.                                 LA_LabelID,    MSG_LOCK_COLOUR_GAD,
  577.                                 LA_BYTE,    &LocalConfig -> EmulationConfig -> LockColour,
  578.                             TAG_DONE);
  579.  
  580.                             LT_EndGroup(Handle);
  581.                         }
  582.  
  583.                         LT_EndGroup(Handle);
  584.                     }
  585.  
  586.                     LT_New(Handle,
  587.                         LA_Type,    VERTICAL_KIND,
  588.                     TAG_DONE);
  589.                     {
  590.                         LT_New(Handle,
  591.                             LA_Type,    CHECKBOX_KIND,
  592.                             LA_LabelID,    MSG_EMULATIONPANEL_WRAP_CURSOR_MOVES_GAD,
  593.                             LA_BYTE,    &LocalConfig -> EmulationConfig -> CursorWrap,
  594.                             LA_ID,        GAD_WRAP_CURSOR_MOVES,
  595.                         TAG_DONE);
  596.  
  597.                         LT_EndGroup(Handle);
  598.                     }
  599.  
  600.                     LT_EndGroup(Handle);
  601.                 }
  602.  
  603.                 LT_New(Handle,
  604.                     LA_Type,    VERTICAL_KIND,
  605.                 TAG_DONE);
  606.                 {
  607. /*
  608.                     LT_New(Handle,
  609.                         LA_Type,    CYCLE_KIND,
  610.                         LA_LabelID,    MSG_EMULATIONPANEL_FONT_SCALE_GAD,
  611.                         LA_BYTE,    &LocalConfig -> EmulationConfig -> FontScale,
  612.                         LACY_FirstLabel,MSG_EMULATIONPANEL_NORMAL_SCALE_TXT,
  613.                         LACY_LastLabel,    MSG_EMULATIONPANEL_HALF_WIDTH_TXT,
  614.                         LA_Chars,    20,
  615.                     TAG_DONE);
  616. */
  617.                     LT_New(Handle,
  618.                         LA_Type,    CHECKBOX_KIND,
  619.                         LA_LabelID,    MSG_LOCK_FONT_MODE_TXT,
  620.                         LA_BYTE,    &LocalConfig -> EmulationConfig -> FontLocked,
  621.                     TAG_DONE);
  622.  
  623.                     LT_New(Handle,
  624.                         LA_Type,    CYCLE_KIND,
  625.                         LA_LabelID,    MSG_EMULATIONPANEL_SMOOTH_SCROLLING_GAD,
  626.                         LA_BYTE,    &LocalConfig -> EmulationConfig -> ScrollMode,
  627.                         LACY_FirstLabel,MSG_EMULATIONPANEL_JUMP_TXT,
  628.                         LACY_LastLabel,    MSG_EMULATIONPANEL_SMOOTH_TXT,
  629.                     TAG_DONE);
  630.  
  631.                     LT_New(Handle,
  632.                         LA_Type,    CYCLE_KIND,
  633.                         LA_LabelID,    MSG_EMULATIONPANEL_DESTRUCTIVE_BACKSPACE_GAD,
  634.                         LA_BYTE,    &LocalConfig -> EmulationConfig -> DestructiveBackspace,
  635.                         LACY_FirstLabel,MSG_DESTRUCTIVE_BS_OFF_TXT,
  636.                         LACY_LastLabel,    MSG_DESTRUCTIVE_BS_SHIFT_TXT,
  637.                     TAG_DONE);
  638.  
  639.                     LT_New(Handle,
  640.                         LA_Type,    STRING_KIND,
  641.                         LA_LabelID,    MSG_EMULATIONPANEL_ANSWERBACK_MESSAGE_GAD,
  642.                         LA_STRPTR,    LocalConfig -> EmulationConfig -> AnswerBack,
  643.                         GTST_MaxChars,    79,
  644.                     TAG_DONE);
  645.  
  646.                     LT_New(Handle,
  647.                         LA_Type,        INTEGER_KIND,
  648.                         LA_LabelID,        MSG_EMULATIONPANEL_PRESCROLL_TXT,
  649.                         LA_UBYTE,        &LocalConfig -> EmulationConfig -> MaxScroll,
  650.                         LAIN_Min,        0,
  651.                         LAIN_Max,        255,
  652.                         LA_ID,            GAD_SCROLL,
  653.                         LAIN_UseIncrementers,    TRUE,
  654.                         GTIN_MaxChars,        3,
  655.                     TAG_DONE);
  656.  
  657.                     LT_New(Handle,
  658.                         LA_Type,        INTEGER_KIND,
  659.                         LA_LabelID,        MSG_EMULATIONPANEL_JUMP_SCROLL_TXT,
  660.                         LA_UBYTE,        &LocalConfig -> EmulationConfig -> MaxJump,
  661.                         LAIN_Min,        0,
  662.                         LAIN_Max,        255,
  663.                         LA_ID,            GAD_JUMP_SCROLL,
  664.                         LAIN_UseIncrementers,    TRUE,
  665.                         GTIN_MaxChars,        3,
  666.                     TAG_DONE);
  667.  
  668.                     LT_EndGroup(Handle);
  669.                 }
  670.  
  671.                 if(PageTitle[3])
  672.                 {
  673.                     LT_New(Handle,
  674.                         LA_Type,    VERTICAL_KIND,
  675.                     TAG_DONE);
  676.                     {
  677.                         LT_New(Handle,
  678.                             LA_Type,    VERTICAL_KIND,
  679.                         TAG_DONE);
  680.                         {
  681.                             LT_New(Handle,
  682.                                 LA_Type,    CHECKBOX_KIND,
  683.                                 LA_LabelID,    MSG_PENPANEL_STANDARDPENS_TXT,
  684.                                 LA_ID,        GAD_STDPENS,
  685.                                 LA_BYTE,    &LocalConfig -> EmulationConfig -> UseStandardPens,
  686.                             TAG_DONE);
  687.  
  688.                             LT_EndGroup(Handle);
  689.                         }
  690.  
  691.                         LT_New(Handle,
  692.                             LA_Type,    VERTICAL_KIND,
  693.                         TAG_DONE);
  694.                         {
  695.                             LT_New(Handle,
  696.                                 LA_Type,    BUTTON_KIND,
  697.                                 LA_LabelID,    MSG_PENPANEL_EDITPENS_TXT,
  698.                                 LA_ID,        GAD_EDITPENS,
  699.                                 GA_Disabled,    LocalConfig -> EmulationConfig -> UseStandardPens,
  700.                             TAG_DONE);
  701.  
  702.                             LT_EndGroup(Handle);
  703.                         }
  704.  
  705.                         LT_EndGroup(Handle);
  706.                     }
  707.                 }
  708.  
  709.                 LT_EndGroup(Handle);
  710.             }
  711.  
  712.             LT_New(Handle,
  713.                 LA_Type,VERTICAL_KIND,
  714.             TAG_DONE);
  715.             {
  716.                 LT_New(Handle,
  717.                     LA_Type,    XBAR_KIND,
  718.                     LAXB_FullSize,    TRUE,
  719.                 TAG_DONE);
  720.  
  721.                 LT_EndGroup(Handle);
  722.             }
  723.  
  724.             LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  725.                 LAGR_SameSize,    TRUE,
  726.                 LAGR_Spread,    TRUE,
  727.             TAG_DONE);
  728.             {
  729.                 LT_New(Handle,
  730.                     LA_Type,    BUTTON_KIND,
  731.                     LA_LabelID,    MSG_GLOBAL_USE_GAD,
  732.                     LA_ID,        GAD_USE,
  733.                     LABT_ReturnKey,    TRUE,
  734.                     LABT_ExtraFat,    TRUE,
  735.                 TAG_DONE);
  736.  
  737.                 if(Default)
  738.                 {
  739.                     LT_New(Handle,
  740.                         LA_Type,    BUTTON_KIND,
  741.                         LA_LabelID,    MSG_GLOBAL_DEFAULT_GAD,
  742.                         LA_ID,        GAD_DEFAULT,
  743.                         LABT_ExtraFat,    TRUE,
  744.                     TAG_DONE);
  745.                 }
  746.  
  747.                 LT_New(Handle,
  748.                     LA_Type,    BUTTON_KIND,
  749.                     LA_LabelID,    MSG_GLOBAL_CANCEL_GAD,
  750.                     LA_ID,        GAD_CANCEL,
  751.                     LABT_EscKey,    TRUE,
  752.                     LABT_ExtraFat,    TRUE,
  753.                 TAG_DONE);
  754.  
  755.                 LT_EndGroup(Handle);
  756.             }
  757.  
  758.             LT_EndGroup(Handle);
  759.         }
  760.  
  761.         if(PanelWindow = LT_Build(Handle,
  762.             LAWN_TitleID,        MSG_EMULATIONPANEL_EMULATION_PREFERENCES_TXT,
  763.             LAWN_IDCMP,        IDCMP_CLOSEWINDOW,
  764.             LAWN_HelpHook,        &GuideHook,
  765.             LAWN_Parent,        Window,
  766.             WA_DepthGadget,        TRUE,
  767.             WA_CloseGadget,        TRUE,
  768.             WA_DragBar,        TRUE,
  769.             WA_RMBTrap,        TRUE,
  770.             WA_Activate,        TRUE,
  771.             WA_SimpleRefresh,    TRUE,
  772.         TAG_DONE))
  773.         {
  774.             struct IntuiMessage    *Message;
  775.             BOOLEAN             Done = FALSE;
  776.             ULONG             MsgClass;
  777.             UWORD             MsgCode;
  778.             struct Gadget        *MsgGadget;
  779.  
  780.             GuideContext(CONTEXT_EMULATION);
  781.  
  782.             PushWindow(PanelWindow);
  783.  
  784.             LT_ShowWindow(Handle,TRUE);
  785.  
  786.             do
  787.             {
  788.                 if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  789.                 {
  790.                     SaveConfig(PrivateConfig,LocalConfig);
  791.  
  792.                     break;
  793.                 }
  794.  
  795.                 while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  796.                 {
  797.                     MsgClass    = Message -> Class;
  798.                     MsgCode        = Message -> Code;
  799.                     MsgGadget    = (struct Gadget *)Message -> IAddress;
  800.  
  801.                     LT_ReplyIMsg(Message);
  802.  
  803.                     if(MsgClass == IDCMP_CLOSEWINDOW)
  804.                     {
  805.                         SaveConfig(PrivateConfig,LocalConfig);
  806.  
  807.                         Done = TRUE;
  808.                     }
  809.  
  810.                     if(MsgClass == IDCMP_GADGETUP)
  811.                     {
  812.                         switch(MsgGadget -> GadgetID)
  813.                         {
  814.                             case GAD_STDPENS:
  815.  
  816.                                 LT_SetAttributes(Handle,GAD_EDITPENS,
  817.                                     GA_Disabled,    MsgCode,
  818.                                 TAG_DONE);
  819.  
  820.                                 break;
  821.  
  822.                             case GAD_EDITPENS:
  823.  
  824.                                 LT_LockWindow(PanelWindow);
  825.  
  826.                                 PenPanel(PanelWindow,LocalConfig,Depth);
  827.  
  828.                                 LT_UnlockWindow(PanelWindow);
  829.  
  830.                                 break;
  831.  
  832.                             case GAD_USE:
  833.  
  834.                                 LT_UpdateStrings(Handle);
  835.  
  836.                                 Changed = TRUE;
  837.  
  838.                                 Done = TRUE;
  839.                                 break;
  840.  
  841.                             case GAD_CANCEL:
  842.  
  843.                                 SaveConfig(PrivateConfig,LocalConfig);
  844.  
  845.                                 Cancel = Done = TRUE;
  846.                                 break;
  847.  
  848.                             case GAD_DEFAULT:
  849.  
  850.                                 *Default = TRUE;
  851.  
  852.                                 Done = TRUE;
  853.                                 break;
  854.  
  855.                             case GAD_BBS_ANSI_COMPLIANT:
  856.  
  857.                                 if(MsgCode)
  858.                                 {
  859.                                     LT_SetAttributes(Handle,GAD_TERMINALTYPE,
  860.                                         GTCY_Active,    TERMINAL_VT102,
  861.                                     TAG_DONE);
  862.  
  863.                                     LT_SetAttributes(Handle,GAD_CLS_RESETS_CURSOR,
  864.                                         GTCB_Checked,    TRUE,
  865.                                     TAG_DONE);
  866.  
  867.                                     LT_SetAttributes(Handle,GAD_WRAP_CURSOR_MOVES,
  868.                                         GTCB_Checked,    TRUE,
  869.                                     TAG_DONE);
  870.  
  871.                                     LT_SetAttributes(Handle,GAD_WRAP_CHARACTERS,
  872.                                         GTCB_Checked,    TRUE,
  873.                                     TAG_DONE);
  874.                                 }
  875.  
  876.                                 break;
  877.  
  878.                             default:
  879.  
  880.                                 LT_SetAttributes(Handle,GAD_BBS_ANSI_COMPLIANT,
  881.                                     GTCB_Checked,    LocalConfig -> EmulationConfig -> CLSResetsCursor && LocalConfig -> EmulationConfig -> CursorWrap && LocalConfig -> EmulationConfig -> LineWrap && LocalConfig -> EmulationConfig -> TerminalType == TERMINAL_VT102,
  882.                                 TAG_DONE);
  883.  
  884.                                 break;
  885.                         }
  886.                     }
  887.                 }
  888.             }
  889.             while(!Done);
  890.  
  891.             PopWindow();
  892.         }
  893.  
  894.         LT_DeleteHandle(Handle);
  895.     }
  896.  
  897.     if(LocalConfig == Config)
  898.         ScreenSizeStuff();
  899.  
  900.     if(Default)
  901.         return((BYTE)(!Cancel));
  902.     else
  903.         return(Changed);
  904. }
  905.